//package com.uw.scenic.advice;
//
//import com.uw.scenic.annotation.IgnoreResponseAdvice;
//import com.uw.scenic.vo.CommonResponse;
//import com.uw.scenic.vo.R;
//import org.springframework.core.MethodParameter;
//import org.springframework.http.MediaType;
//import org.springframework.http.converter.HttpMessageConverter;
//import org.springframework.http.server.ServerHttpRequest;
//import org.springframework.http.server.ServerHttpResponse;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
//
//
///**
// *  统一响应增强
// */
//@RestControllerAdvice
//public class CommonResponseDataAdvice implements ResponseBodyAdvice<Object> {
//
//
//    /**
//     * 判断是否需要对响应处理
//     * @param methodParameter
//     * @param aClass
//     * @return
//     */
//    @Override
//    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
//        //如果当前方法所在类标识了IgnoreResponseAdvice 注解，不需要处理
//        if(methodParameter.getDeclaringClass().isAnnotationPresent(IgnoreResponseAdvice.class)){
//            return false;
//        }
//        //如果当方法标识了IgnoreResponseAdvice 注解，不需要处理
//        if(methodParameter.getMethod().isAnnotationPresent(IgnoreResponseAdvice.class)){
//            return false;
//        }
//        //对响应进行处理，执行beforeBodyWrite方法
//        return true;
//    }
//
//
//    /**
//     * 响应返回之前的处理
//     * @param o
//     * @param methodParameter
//     * @param mediaType
//     * @param aClass
//     * @param serverHttpRequest
//     * @param serverHttpResponse
//     * @return
//     */
//    @Override
//    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
//        //定义最终的返回对象
//        R<Object> response= R.successDef();
//        //如果o是null,则代表这个返回类型void不需要设置data
//        if(null==o){
//            return response;
//        }else if(o instanceof R){
//            //如果当前o已经是CommonResponse，不需要再次处理
//            response=(R<Object>) o;
//        }else {
//            //否则把响应对象，作为commonResponse的data部分
//            response.setData(o);
//        }
//        return response;
//    }
//}
